/* Représente un composite, c'est-à-dire un sous-arbre qui 
 */

#ifndef _DTD_COMPOSITE
#define _DTD_COMPOSITE


#include "DtdNode.h"

#include <vector>
#include <list>


/* Type de composite */
enum CompositeType
{
	SEQ, /* Sequence */
	CHC  /* Choix */
};

/* DtdComposite */
class DtdComposite : public DtdNode
{
public :
	DtdComposite( );

	~DtdComposite( );

	/* Ajoute un gosse */
	void appendChild(DtdNode *p_child);
	/* Ajoute des gosses */
	void appendChildren(std::list<DtdNode*> &p_children);

	/* Permet de traverser la liste des enfants */
	void setItToBeg();
	DtdNode* getItNext();
	bool itContinue();

	
public :
	/* Type du composite */
	enum CompositeType compositeType;

private :
	/* Gosses du noeud */
	std::vector<DtdNode*> children;

	/* Itérateur constant pour le parcour des enfants */
	std::vector<DtdNode*>::iterator it;
};


#endif
